/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.    
 */
using System;
using Velocity4Net.Ctx;
using System.Collections;
namespace Velocity4Net.Runtime.Parse.AST
{

    /**
     * AST Node for creating a map / dictionary.
     *
     * This class was originally generated from Parset.jjt.
     *
     * @version $Id: ASTMap.java 928475 2010-03-28 18:54:55Z nbubna $
     * @since 1.5
     */
    public class ASTMap : SimpleNode
    {
        /**
         * @param id
         */
        public ASTMap(int id)
            : base(id)
        {
        }

        /**
         * @param p
         * @param id
         */
        public ASTMap(Parser p, int id)
            : base(p, id)
        {
            ;
        }
        /**
         * @see org.apache.velocity.runtime.parser.node.SimpleNode#value(org.apache.velocity.context.InternalContextAdapter)
         */
        public override Object GetValue(InternalContextAdapter context)
        {
            int size = jjtGetNumChildren();

            Hashtable objectMap = new System.Collections.Hashtable();

            for (int i = 0; i < size; i += 2)
            {
                SimpleNode keyNode = (SimpleNode)jjtGetChild(i);
                SimpleNode valueNode = (SimpleNode)jjtGetChild(i + 1);

                Object key = (keyNode == null ? null : keyNode.GetValue(context));
                Object value = (valueNode == null ? null : valueNode.GetValue(context));

                objectMap.Add(key, value);
            }

            return objectMap;
        }
    }
}